package br.ufpi.domain;
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


import java.util.Iterator;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.OneToMany;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;


/**
 *
 * @author cleiton
 */
@Entity
public class Usuario extends Persistente{
   
  
    public Long getId() {
        return super.getId();
    }

    public void setId(Long id) {
        super.setId(id);
    }
    	private String nomeCompleto;
	@Column(unique=true)
	private String matricula; // Login
	private String senha;
	@Column(nullable=false,unique=true)
	private String email;
	private boolean isAdmin;
	private int status;

    
        @Column
        private Double pontosExtra;



        @OneToMany(mappedBy="usuario", fetch=FetchType.LAZY)
	@Cascade(CascadeType.ALL)
	private List<Pergunta> perguntas;

        @OneToMany(mappedBy="usuario", fetch=FetchType.LAZY)
	@Cascade(CascadeType.ALL)
	private List<Resposta> respostas;

        

        public double getPontosRespostas() {
        	//TODO Implementar isto de forma melhor
            Iterator it = perguntas.iterator();
            double total=0;
            while(it.hasNext()) {
                Resposta p = (Resposta) it.next();
                total+=p.getPontuacao();
            }

            return total;
        }

        public double getPontuacaoTotal() {
            return getPontosExtra() + getPontosRespostas();
        }

        public double getPontosExtra() {
            return this.pontosExtra;
        }

        public void addPontos(double pontos) {
            this.pontosExtra+=pontos;
        }

        public void setPontosExtra(double pontos) {
            this.pontosExtra=pontos;
        }

	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public boolean isAdmin() {
		return isAdmin;
	}
	public void setAdmin(boolean isAdmin) {
		this.isAdmin = isAdmin;
	}
	
        public String getNomeCompleto() {
		return nomeCompleto;
	}
	public void setNomeCompleto(String nomeCompleto) {
		this.nomeCompleto = nomeCompleto;
	}
	public String getMatricula() {
		return matricula;
	}
	public void setMatricula(String matricula) {
		this.matricula = matricula;
	}
	public String getSenha() {
		return senha;
	}
	public void setSenha(String senha) {
		this.senha = senha;
	}
	public void setPerguntas(List<Pergunta> perguntas) {
		this.perguntas = perguntas;
	}

	public List<Pergunta> getPerguntas() {
		return perguntas;
	}
	public void setRespostas(List<Resposta> respostas) {
		this.respostas = respostas;
	}
	public List<Resposta> getRespostas() {
		return respostas;
	}

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (getId()!= null ? getId().hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Usuario)) {
            return false;
        }
     Usuario other = (Usuario) object;
        if ((this.getId() == null && other.getId() != null) || (this.getId() != null && !this.getId().equals(other.getId()))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "objeto.Professor[id=" + getId() + "]";
    }

    
    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }
}
